package gui;

import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;

/**
 * Klasse Laadscherm
 * Erft van JComponent.
 * Bevat alle methoden om het laadscherm van jIRC te tonen.
 * @author Maarten Minnebo, David Covemaeker, Tim Van Thuyne, Toon Kint *
 */

public class LaadScherm extends JComponent
{
	private static final long serialVersionUID = 2389737202054874615L;
	private MainFrame mainFrame;
	private JLabel imageLabel;
	private JPanel progressBarPanel;
	private FlowLayout progressBarPanelFlowLayout;
	private JProgressBar progressBar;
	private ImageIcon myImage;
	private Timer timer;
	private final static int interval = 500;
	private int i;
	private GUIController guiController;
	
	/**
	 * Constructor van LaadScherm
	 * Maakt LaadScherm aan en roept de initialisatiefunctie van deze GUI op.
	 * @param mf MainFrame
	 * @param guiController GUIController
	 */
	public LaadScherm(MainFrame mf, GUIController guiController)
	{
		mainFrame = mf;
		imageLabel = new JLabel();
		progressBarPanel = new JPanel();
		progressBarPanelFlowLayout = new FlowLayout();
		progressBar = new JProgressBar(0, 10);
		myImage = createImageIcon("/IRC.png","Image");
		setTimer();
		this.guiController = guiController;
		
		try
		{
			welcomeInit();			
			timer.start();
		}
		catch(Exception ex)
		{
			JOptionPane.showMessageDialog(mainFrame.getContentPane(),"Er is een onverwachte fout opgetreden!","Foutbootschap",JOptionPane.ERROR_MESSAGE);
		}		
	}
	
	/**
	 * Deze klasse wordt opgroepen vanuit de constructor.
	 * Initialiseert de GUI van het LaadScherm.
	 * @throws Exception
	 */
	private void welcomeInit() throws Exception
	{
		this.setSize(770, 490);
		setLayout(new BorderLayout());
		progressBarPanel.setLayout(progressBarPanelFlowLayout);
		progressBarPanel.setBackground(Color.BLACK);
		imageLabel.setIcon(myImage);
		progressBar.setValue(0);
		progressBar.setStringPainted(true);
		this.add(imageLabel, BorderLayout.CENTER);
	    this.add(progressBarPanel, BorderLayout.SOUTH);
	    progressBarPanel.add(progressBar, null);
	}
	
	/**
	 * Functie die een afbeelding naar de GUI stuurt
	 * @param path pad naar de afbeelding (bestandslocatie)
	 * @param description beschrijving van de afbeelding
	 * @return een ImageIcon (= de afbeelding) of null wanneer afbeelding niet gevonden kon worden.
	 */
	public ImageIcon createImageIcon(String path, String description) 
	{
		  URL imgURL = getClass().getResource(path);
		  if (imgURL != null) {
			  return new ImageIcon(imgURL, description);
		  } else {
			  System.err.println("Couldn't find file: " + path);
			  return null;
		  }
	}
	
	/**
	 * Functie die de timer zet die bijhoudt hoelang het opstartscherm al loopt.
	 * Wanneer de timer klaar is zal de switchToComponent worden opgeroepen en wordt het startscherm in de GUI ingeladen.
	 */
	private void setTimer()
	{
		timer = new Timer(interval, new ActionListener() 
		{
			public void actionPerformed(ActionEvent evt)
			{
				if (i == 10)
				{
					timer.stop();
					progressBar.setValue(100);
					setVisible(false);
					mainFrame.switchToComponent(guiController, ComponentSwitcher.ComponentChoice.StartScherm);			
				}
				
				i = i + 1;
				progressBar.setValue(i);
			}
		});
	}
}